#include<iostream>
#include<map>
#include<queue>
#include<cstring>
using namespace std;

#define int long long

int T;
int n;
int a[200010];

map<int,int>mp;
struct Range{
    int l,r,k;
    bool operator <(const Range r)const{
        return k>r.k;
    }
};
priority_queue<Range>q;

int tree[4000010],tag[4000010];
void push_down(int x,int l,int r){
    tree[x*2]+=tag[x];
    tree[x*2+1]+=tag[x];
    tag[x*2]+=tag[x];
    tag[x*2+1]+=tag[x];
    tag[x]=0;
}
void modify(int x,int l,int r,int tl,int tr,int k){
    if(l>tr||r<tl){
        return ;
    }
    if(l>=tl&&r<=tr){
        tree[x]+=k;
        tag[x]+=k;
        return ;
    }
    push_down(x,l,r);
    int mid=(l+r)/2;
    modify(x*2,l,mid,tl,tr,k);
    modify(x*2+1,mid+1,r,tl,tr,k);
}
int query(int x,int l,int r,int tl,int tr){
    if(l>tr||r<tl){
        return 0;
    }
    if(l>=tl&&r<=tr){
        return tree[x];
    }
    push_down(x,l,r);
    int mid=(l+r)/2;
    return max(query(x*2,l,mid,tl,tr),query(x*2+1,mid+1,r,tl,tr));
}

void clear(){
    mp.clear();
    while(q.size())q.pop();
    memset(tree,0,sizeof(tree));
    memset(tag,0,sizeof(tag));
}

void solve(){
    cin>>n;
    for(int i=1;i<=n;++i){
        cin>>a[i];
    }
    if(n<=15){
        int ans=0;
        for(int i=0;i<(1<<(n+1));++i){
            int lstr=0,lstb=0,tmp=0;
            for(int j=0;j<=n;++j){
                if((i>>j)&1){
                    if(a[j]==a[lstr]){
                        tmp+=a[j];
                    }
                    lstr=j;
                }
                else{
                    if(a[j]==a[lstb]){
                        tmp+=a[j];
                    }
                    lstb=j;
                }
            }
            ans=max(ans,tmp);
        }
        cout<<ans<<"\n";
    }
    else{
        int ans=0;
        for(int i=1;i<=n;++i){
            if(mp[a[i]]){
                q.push({mp[a[i]]+1,i,a[i]});
                modify(1,1,n,mp[a[i]]+1,i,1);
                ans+=a[i];
                if(query(1,1,n,mp[a[i]]+1,i)>2){
                    vector<Range>tmp;
                    while(q.size()&&query(1,1,n,mp[a[i]]+1,i)>2){
                        modify(1,1,n,q.top().l,q.top().r,-1);
                        tmp.push_back(q.top());
                        q.pop();
                    }
                    ans-=tmp.back().k;
                    tmp.pop_back();
                    for(int i=0;i<tmp.size();++i){
                        modify(1,1,n,tmp[i].l,tmp[i].r,1);
                    }
                }
                mp[a[i]]=i;
            }
            else{
                mp[a[i]]=i;
            }
        }
        cout<<ans<<"\n";
    }
}

signed main(){
    freopen("color.in","r",stdin);
    freopen("color.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>T;
    while(T--){
        clear();
        solve();
    }
}
